#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
//系统调用里面的用的是 文件描述符
//而封装系统调用的用的是 FILE*结构体类型->所以可以推断FILE结构体里面会封装文件描述符
int main()
{
  //证明FILE确实存在文件描述符 并且编译器默认打开三个文件流 
  printf("stdin ->%d\n",stdin->_fileno);//stdin stdout stderr 为三个类型为FILE*的文件

  printf("stdout ->%d\n",stdout->_fileno);//stdin stdout stderr 为三个类型为FILE*的文件
  printf("stderr ->%d\n",stderr->_fileno);//stdin stdout stderr 为三个类型为FILE*的文件


  //文件描述符的规则  给新打开的文件分配文件描述符从文件描述符中寻找最小的未被使用的作为新文件的下标 证明如下
  close(1);  
  int fd =open("log2.txt", O_WRONLY | O_CREAT ,0666);
  printf("文件描述符->%d\n",fd);
  //-------------------------------------

  int fd2 =open("log.txt", O_WRONLY | O_CREAT ,0666);
  if(fd<0)
  {
    perror("open");
    return 1;

  }
  //
  const char* str ="hello Liunx";
  write(fd2,str,strlen(str));
  close(fd2);                                                        
  return 0;
}
